﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Quanlytruongtruongtieuhoc
{
    public partial class frmQuanlynguoidung : Form
    {
        public static int loai=0;
        public static string taikhoan;
        public frmQuanlynguoidung()
        {
            InitializeComponent();
        }

        private void mởLạiTàiKhoảnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Auto(txtTaikhoan);
            pnCapmatkhau.Visible = false;
            pnLoad.Visible = false;
            pnTaikhoan.Visible = true;
            pnCapquyen.Visible = false;
        }
        private void Auto(TextBox a)
        {
            try
            {
                AutoCompleteStringCollection auto2 = new AutoCompleteStringCollection();
                SqlCommand com = new SqlCommand("select ma_gv from giao_vien where ma_loai_quyen!='Q001'",clsKetnoi.con);
                SqlDataReader dr = com.ExecuteReader();
                if (dr.HasRows == true)
                {
                    while (dr.Read()) 
                    auto2.Add(dr[0].ToString());
                }
                dr.Close();
                a.AutoCompleteCustomSource = auto2;
            }
            catch (Exception)
            {
                
                throw;
            }
        }
        private void Loadds()
        {
            try
            {
                pnCapmatkhau.Visible = false;
               // pnThongtin.Visible = false;
                pnLoad.Visible = true;
                pnTaikhoan.Visible = false;
                dtgNguoidung.Rows.Clear();
                pnCapquyen.Visible = false;
                clsKetnoi.taoKetnoi();
                SqlDataAdapter ap = new SqlDataAdapter("select ho,ten,ma_gv,khoa_tai_khoan,rtrim(ten_quyen) from giao_vien a,quyen b where a.ma_loai_quyen=b.ma_loai_quyen and mat_khau!='' and xoa='False'", clsKetnoi.con);
                DataTable taikhoan = new DataTable();
                ap.Fill(taikhoan);
                for (int i = 0; i < taikhoan.Rows.Count; i++)
                {
                    DataRow row = taikhoan.Rows[i];
                    string ten = row[0].ToString() + " " + row[1].ToString();
                    string khoa;
                    SqlCommand com = new SqlCommand("select khoa_tai_khoan from giao_vien where ma_gv='" + row[2].ToString() + "'", clsKetnoi.con);
                    int kh = Convert.ToInt32(com.ExecuteScalar());
                    if (kh == 0)
                        khoa = "Không khóa";
                    else khoa = "Khóa";
                    dtgNguoidung.Rows.Add();
                    dtgNguoidung.Rows[i].Cells[2].Value = row[2];
                    dtgNguoidung.Rows[i].Cells[4].Value = khoa;
                    dtgNguoidung.Rows[i].Cells[3].Value = row[4];
                    dtgNguoidung.Rows[i].Cells[1].Value = ten;
                    dtgNguoidung.Rows[i].Cells[0].Value = i + 1;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void Hienmakhoa(ComboBox co)
        {
            co.DataBindings.Clear();
            SqlDataAdapter ap = new SqlDataAdapter("select ma_gv from giao_vien where khoa_tai_khoan='True' and xoa='False'", clsKetnoi.con);
            DataTable gv = new DataTable();
            gv.Clear();
            ap.Fill(gv);
            if (gv.Rows.Count == 0)
            {
                co.Text = "";
            }
            else
            {
                co.DataSource = gv;
                co.DisplayMember = "ma_gv";
            }
        }
        private void Hienmakkhoa(ComboBox co)
        {
            co.DataBindings.Clear();
            SqlDataAdapter ap = new SqlDataAdapter("select ma_gv from giao_vien where khoa_tai_khoan='False' and xoa='False'", clsKetnoi.con);
            DataTable gv = new DataTable();
            gv.Clear();
            ap.Fill(gv);
            if (gv.Rows.Count == 0)
            {
                co.Text = "";
            }
            else
            {
                co.DataSource = gv;
                co.DisplayMember = "ma_gv";
            }
          //  Auto(txtTaikhoan);
        }
        private void frmQuanlynguoidung_Load(object sender, EventArgs e)
        {
            Loadds();
            Hienmakhoa(cbMagv);
            Hienmakkhoa(cbTaikhoan1);
            Auto(txtTaikhoan);
        }
        private string Taomatkhau()
        {
            string[] so = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
            string[] chu = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
            string kq = "";
            Random rd = new Random();
            for (int i = 0; i < 6; i++)
            {
                if (i == 1 || i == 3)
                {
                    kq = kq + so[rd.Next(0, so.Length)];
                }
                else kq = kq + chu[rd.Next(0, chu.Length)];
            }
            return kq;
        }
        private void taoNguoidung()
        {
            try
            {
                SqlDataAdapter ap = new SqlDataAdapter("select ma_gv from giao_vien where ma_gv not in(select ma_gv from giao_vien where mat_khau!='')", clsKetnoi.con);
                DataTable gv = new DataTable();
                gv.Clear();
                ap.Fill(gv);
                string mk1;
                string mk2;
                if (gv.Rows.Count == 0)
                {
                    MessageBox.Show("Không có người dùng mới để tạo.", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                }
                else
                {
                    for (int i = 0; i < gv.Rows.Count; i++)
                    {
                        DataRow row = gv.Rows[i];
                        mk1 = Taomatkhau();
                        mk2 = clsKetnoi.toMD5(mk1);
                        SqlCommand com = new SqlCommand("update giao_vien set mat_khau='" + mk2 + "' where ma_gv='" + row[0].ToString() + "'", clsKetnoi.con);
                        SqlCommand com1 = new SqlCommand("insert into tam values('" + row[0].ToString() + "','" + mk1 + "')", clsKetnoi.con);
                        com1.ExecuteNonQuery();
                        com.ExecuteNonQuery();
                    }
                    MessageBox.Show("Thao tác thành công.", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void thoátToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
        private void cấpLạiMậtKhẩuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            loai = 2;
            pnLoad.Visible = false;
            pnCapmatkhau.Visible = true;
            pnTaikhoan.Visible = false;
            pnCapquyen.Visible = false;
            taikhoan = txtTaikhoan.Text;
        }
        private void tạoNgườiDùngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            taoNguoidung();
            Loadds();
        }
        private void Hien(string taikhoan,TextBox a)
        {
            try
            {
                SqlCommand com = new SqlCommand("select ten from giao_vien where ma_gv='" + taikhoan + "'", clsKetnoi.con);
                SqlCommand com1 = new SqlCommand("select ho from giao_vien where ma_gv='" + taikhoan+ "'", clsKetnoi.con);
                string hoten = com1.ExecuteScalar().ToString() + " " + com.ExecuteScalar().ToString();
                a.Text = hoten;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void btCap_Click(object sender, EventArgs e)
        {
            try
            {
                string mk1,mk2;
                mk1=Taomatkhau();
                mk2=clsKetnoi.toMD5(mk1);
                if (txtTaikhoan.Text != "")
                {
                    SqlCommand com2 = new SqlCommand("select ma_gv from giao_vien where ma_gv='" + txtTaikhoan.Text + "'", clsKetnoi.con);
                    try
                    {
                    string magvmoi = com2.ExecuteScalar().ToString();
                        SqlCommand com = new SqlCommand("update giao_vien set mat_khau='" + mk2 + "' where ma_gv='" + txtTaikhoan.Text + "'", clsKetnoi.con);
                        SqlCommand com1 = new SqlCommand("update tam set mat_khau='" + mk1 + "' where nguoi_dung='" + txtTaikhoan.Text + "'", clsKetnoi.con);
                        com.ExecuteNonQuery();
                        com1.ExecuteNonQuery();
                        MessageBox.Show("Cấp mật khẩu thành công ", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                    }
                    catch(Exception)
                    {
                    MessageBox.Show("Tài khoản không tồn tại trong hệ thống. ", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                    }
                    txtTaikhoan.Text = "";
                    txtTen.Text = "";
                    txtTaikhoan.Focus();
                }
                else MessageBox.Show("Chưa nhập tài khoản ", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btKhoataikhoan_Click(object sender, EventArgs e)
        {
            try
            {
                if (cbTaikhoan1.Text=="")
                {
                    MessageBox.Show("Chưa nhập tài khoản", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                }
                else
                {
                    if (isAdmin(cbTaikhoan1.Text))
                    {
                        MessageBox.Show("Không thể khóa tài khoản này", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                    }
                    else
                    {
                        SqlCommand com = new SqlCommand("update giao_vien set khoa_tai_khoan='True' where ma_gv='" + cbTaikhoan1.Text + "'", clsKetnoi.con);
                        DialogResult kq = new DialogResult();
                        kq = MessageBox.Show("Có chắc khóa tài khoản này không ?", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (DialogResult.OK == kq)
                        {
                            com.ExecuteNonQuery();
                            MessageBox.Show("Khóa tài khoản thành công", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                            cbTaikhoan1.Focus();
                            Hienmakhoa(cbMagv);
                            Hienmakkhoa(cbTaikhoan1);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private bool isAdmin(string ma)
        {
            try
            {
                SqlCommand com = new SqlCommand("select rtrim(ma_loai_quyen) from giao_vien where ma_gv='" + ma + "'", clsKetnoi.con);
                string maq = com.ExecuteScalar().ToString();
                if (maq == "Q001")
                    return true;
                else return false;
            }
            catch (Exception)
            {
            }
            return true;
        }
        private void cbMotaikhoan_Click(object sender, EventArgs e)
        {
            try
            {
                if (cbMagv.Text == "")
                {
                    MessageBox.Show("Chưa nhập tài khoản", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
                }
                else
                {
                        SqlCommand com = new SqlCommand("update giao_vien set khoa_tai_khoan='False' where ma_gv='" + cbMagv.Text + "'", clsKetnoi.con);
                        DialogResult kq = new DialogResult();
                        kq = MessageBox.Show("Có chắc mở tài khoản này không ?", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (DialogResult.OK == kq)
                        {
                            com.ExecuteNonQuery();
                            MessageBox.Show("Mở khóa tài khoản thành công", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                            cbMagv.Focus();
                            Hienmakhoa(cbMagv);
                            Hienmakkhoa(cbTaikhoan1);
                        }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void cbTaikhoan1_Leave(object sender, EventArgs e)
        {
           
        }

        private void cbMagv_Leave(object sender, EventArgs e)
        {
            
        }

        private void cấpQuyềnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pnCapquyen.Visible = true;
            pnLoad.Visible = false;
            pnTaikhoan.Visible = false;
            pnCapmatkhau.Visible = false;
            dtGCapquyen.Rows.Clear();
            try
            {
                SqlDataAdapter ap = new SqlDataAdapter("select ma_gv,ho,ten, ten_quyen from giao_vien a,quyen b where a.ma_loai_quyen=b.ma_loai_quyen and a.ma_loai_quyen!='Q001'", clsKetnoi.con);
                DataTable magv = new DataTable();
                magv.Clear();
                ap.Fill(magv);
                SqlDataAdapter ap1 = new SqlDataAdapter("select ma_loai_quyen,rtrim(ten_quyen) as ten_quyen from quyen where ma_loai_quyen!='Q001'", clsKetnoi.con);
                DataTable quyen = new DataTable();
                quyen.Clear();
                ap1.Fill(quyen);
                for (int i = 0; i < magv.Rows.Count; i++)
                {
                    DataRow row = magv.Rows[i];
                    dtGCapquyen.Rows.Add();
                    dtGCapquyen.Rows[i].Cells[0].Value = i + 1;
                    dtGCapquyen.Rows[i].Cells[1].Value = row[0];
                    dtGCapquyen.Rows[i].Cells[2].Value = row[1] + " " + row[2];
                    dtGCapquyen.Rows[i].Cells[3].Value = row[3];
                    (dtGCapquyen.Columns[4] as DataGridViewComboBoxColumn).DataSource = quyen;
                    (dtGCapquyen.Columns[4] as DataGridViewComboBoxColumn).DisplayMember = "ten_quyen";
                    (dtGCapquyen.Columns[4] as DataGridViewComboBoxColumn).ValueMember = "ma_loai_quyen";
                    DataGridViewRow r = dtGCapquyen.Rows[i];
                    r.Height = 30;
                }
                foreach (DataGridViewRow row1 in dtGCapquyen.Rows)
                {
                    ((DataGridViewCheckBoxCell)row1.Cells[5]).Value = "False";
                }
               
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btCapquyen_Click(object sender, EventArgs e)
        {
            try
            {
                int dem = 0;
                string quyen="";
                for (int i = 0; i < dtGCapquyen.Rows.Count; i++)
                {
                    if (dtGCapquyen.Rows[i].Cells[5].Value.ToString() == "True")
                    {
                       
                        DataGridViewRow row1=dtGCapquyen.Rows[i];
                        try
                        {
                           // ((DataGridViewComboBoxCell)row1.Cells[4]).ReadOnly = false;
                            quyen = ((DataGridViewComboBoxCell)row1.Cells[4]).Value.ToString();
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Chưa chọn quyền cập nhật.", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                            break;
                        }                       
                        SqlCommand com = new SqlCommand("update giao_vien set ma_loai_quyen='" + quyen + "' where ma_gv='" + dtGCapquyen.Rows[i].Cells[1].Value.ToString() + "'", clsKetnoi.con);
                        com.ExecuteNonQuery();
                        dem++;
                    }
                }
                MessageBox.Show("Đã cập nhật quyền, có " + dem + " tài khoản được cập nhật.", "Thông tin", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                cấpQuyềnToolStripMenuItem_Click(sender, e);
            }
            catch (Exception ex )
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void danhSáchNgườiDùngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pnLoad.Visible = true;
            Loadds();
            pnCapquyen.Visible = false;
            pnCapmatkhau.Visible = false;
            pnTaikhoan.Visible = false;
        }

        private void txtTaikhoan_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtTen_Leave(object sender, EventArgs e)
        {
           
        }

        private void txtTaikhoan_Leave(object sender, EventArgs e)
        {
            Hien(txtTaikhoan.Text, txtTen);
        }

        private void inMậtKhẩuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            loai = 1;
            frmInmatkhau A = new frmInmatkhau();
            A.ShowDialog();
        }

        private void btIn_Click(object sender, EventArgs e)
        {
            taikhoan=txtTaikhoan.Text;
            loai = 2;
            frmInmatkhau A = new frmInmatkhau();
            A.ShowDialog();
        }
    }
}
